/** 
 * @author lilin
 * @date 2012-3-1 上午08:40:44  
 * @annotation
 */
package com.lilin.gps.utils;

import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;

import com.lilin.gps.model.GPSInfo;

public class GPSUtils {

	// 位置服务类
	private static LocationManager locationManager;
	// 精确度
	private static Criteria criteria;
	// 位置提供器
	private static String provider;
	private static int getTime = 5000;	// 每15秒获得一次
	private static int distance = 5;	// 距离10米以上

	public static boolean checkGPS(final Context context) {
		
		LocationManager locmanager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);// 获取位置管理服务
		if (locmanager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
			return true;//GPS模块正常
		}
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		builder.setMessage("GPS未打开,要打开吗？");
		builder.setTitle("提示");
		builder.setCancelable(false).setPositiveButton("确定",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
						context.startActivity(intent);
					}
				});
		builder.setNegativeButton("取消", null).show();
		return false;
	}

	public static boolean checkGPSStatus(final Context context) {
		LocationManager locmanager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);// 获取位置管理服务
		if (locmanager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
			return true;
		}
		return false;
	}

	// 初始化
	public static GPSInfo getGPS(Context context) {
		GPSInfo gps = null;
		
		//初始化 位置服务类
		locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
		//初始化 精确度参数
		criteria = new Criteria();
		// 位置解析的精度
		// 精确模式 Criteria.ACCURACY_FINE 模糊模式 Criteria.ACCURACY_COARSE
		criteria.setAccuracy(Criteria.ACCURACY_FINE);
		// 是否提供海拔高度信息
		criteria.setAltitudeRequired(true);		
		// 是否提供方向信息
		criteria.setBearingRequired(false);					
		// 是否提供速度信息
		criteria.setSpeedRequired(false);					
		// 是否允许运营商计费
		criteria.setCostAllowed(false);					
		//电池消耗
		//无 Criteria.NO_REQUIREMENT、低 Criteria.POWER_LOW、中 Criteria. POWER_MEDIUM、高 Criteria.POWER_HIGH
		criteria.setPowerRequirement(Criteria.POWER_LOW);
		
		// 初始化位置提供器:LocationManager.GPS_PROVIDER定位，NETWORK_PROVIDER定位
		// GPS：		高精度 高电耗
		// 网络定位: 低精度 低电耗
		provider = locationManager.getBestProvider(criteria, true); //根据条件获取满足条件的最佳位置提供器
		// 判断位置提供器 是否可用
		if (provider != null) {
			//获取缓存中的位置信息
			Location location = locationManager.getLastKnownLocation(provider);
			//采用GPS定位
			//location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
			gps = getGPS(location);
			// 参数1：位置提供器
			// 参数2：监听位置变化的时间间隔
			// 参数3：监听位置变化的距离间隔
			// 参数4：LocationListener监听器
			locationManager.requestLocationUpdates(provider, getTime, distance,locationListener);// 位置变化监听
		}
		
		// 打印输出所有的位置提供器
		// List<String> providerLists = locationManager.getAllProviders();
		// for(int i=0;i<providerLists.size();i++){
		// Log.i("andli","--provider--"+providerLists.get(i));
		// }
		
		return gps;
	}

	private final static LocationListener locationListener = new LocationListener() {
		public void onLocationChanged(Location arg0) {
			// showInfo(getGPS(), 2);
		}

		public void onProviderDisabled(String arg0) {
			// showInfo(null, -1);
		}

		public void onProviderEnabled(String arg0) {
		}

		public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
		}
	};

	private static GPSInfo getGPS(Location location) {		// 获取GPS相应的数据

		if (location != null) {
			GPSInfo gps   = new GPSInfo();
			gps.Latitude  = location.getLatitude()+"";
			gps.Longitude = location.getLongitude()+"";
			return gps;
		}
		return null;
	}
	
	//Sim卡网络提供商名称
	public static String getSimOperatorName(String operator) {
		if (operator != null) {
			if (operator.equals("46000") || operator.equals("46002")
					|| operator.equals("46007")) {
				return "中国移动";
			} else if (operator.equals("46001")) {
				return "中国联通";
			} else if (operator.equals("46003")) {
				return "中国电信";
			} else {
				return "未知";
			}
		} else {
			return "未知";
		}
	}

}
